package pe.edu.sistemas.sisdiho.repositories;

import java.util.Date;
import java.sql.Time;
import java.util.Iterator;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import pe.edu.sistemas.sisdiho.entities.Peticion;
import pe.edu.sistemas.sisdiho.entities.RegistroHorario;
import pe.edu.sistemas.sisdiho.mappers.PeticionMapper;

@Repository
public class PeticionRepository {
	
	@Autowired
	PeticionMapper peticionMapper;
	
	public void registrarPeticion(Peticion peticion,int idPersona,int tipoEvento){
		Time hInicio=new Time(peticion.gethInicio().getTime());
		Time hFin=new Time(peticion.gethFin().getTime());
		peticionMapper.registrarPeticion(peticion.getNombreEvento(),peticion.getMotivo(),peticion.getDia(),hInicio,hFin,peticion.getNumRep(),peticion.getIdAulaPet(),idPersona,peticion.getNumDiaSemana(),peticion.getSoyUsuario(),peticion.getNombreUsuario(),peticion.getEmail(),tipoEvento,peticion.getAlquiler());
	}
	public void registrarPeticionDir(Peticion peticion,int idPersona,int tipoEvento){
		Time hInicio=new Time(peticion.gethInicio().getTime());
		Time hFin=new Time(peticion.gethFin().getTime());
		peticionMapper.registrarPeticionDir(peticion.getNombreEvento(),peticion.getMotivo(),peticion.getDia(),hInicio,hFin,peticion.getNumRep(),peticion.getIdAulaPet(),idPersona,peticion.getNumDiaSemana(),peticion.getSoyUsuario(),peticion.getNombreUsuario(),peticion.getVisto(),peticion.getRespuesta(),tipoEvento,peticion.getAlquiler());
	}
	public List<Peticion> obtenerPeticionesLabos(){
		return peticionMapper.obtenerPeticionesLabos();
	}
	public List<Peticion> obtenerPeticionesAulas(){
		return peticionMapper.obtenerPeticionesAulas();
	}
	public List<Peticion> obtenerPeticionesMagna(){
		return peticionMapper.obtenerPeticionesMagna();
	}
	public List<Peticion> obtenerMisPeticionesLabo(int idPersona){
		return peticionMapper.obtenerMisPeticionesLabos(idPersona);
	}
	public List<Peticion> obtenerMisPeticionesAula(int idPersona){
		return peticionMapper.obtenerMisPeticionesAulas(idPersona);
	}
	public List<Peticion> obtenerMisPeticionesMagna(int idPersona){
		return peticionMapper.obtenerMisPeticionesMagna(idPersona);
	}
	public void marcarVisto(int idPeticion){
		peticionMapper.marcarVisto(idPeticion);
	}
	public void revertir(int idPeticion){
		peticionMapper.revertir(idPeticion);
	}
	public void marcarAceptado(int idPeticion){
		peticionMapper.marcarAceptado(idPeticion);
	}
	public void marcarRechazado(int idPeticion){
		peticionMapper.marcarRechazado(idPeticion);
	}
	
	public List<Peticion> obtenerLabosAprobados(){
		System.out.println("QUERRY LABOS APROBADOS");
		return peticionMapper.obtenerLabosAprobados();
	}
	public List<Peticion> obtenerAulasAprobadas(){
		System.out.println("QUERRY AYULAS APROBADAS");
		return peticionMapper.obtenerAulasAprobadas();
	}
	public List<Peticion> obtenerMagnaAprobadas(){
		System.out.println("QUERRY MAGNAS APROBADAS");
		return peticionMapper.obtenerMagnaAprobadas();
	}
	public List<Peticion> obtenerLabosPendientes(){
		System.out.println("QUERRY LABO PENDIENTE");
		return peticionMapper.obtenerLabosPendientes();
	}
	public List<Peticion> obtenerAulasPendientes(){
		System.out.println("QUERRY AULA PENDIENTE");
		return peticionMapper.obtenerAulasPendientes();
	}
	public List<Peticion> obtenerMagnaPendientes(){
		System.out.println("QUERRY MAGNA PENDIENTE");
		return peticionMapper.obtenerMagnaPendientes();
	}
	public List<Peticion> obtenerListaPosibleCrucePet(int idpet,int idAula,Date hInicio,Date hFin,int dSem){
		System.out.println("QUERRY POSIBLE CRUCE PET");
		System.out.println("AULA : "+idAula+" hInicio "+hInicio+" hFin "+hFin+" dSem "+dSem);
		Time hInicioT=new Time(hInicio.getTime());
		Time hFinT=new Time(hFin.getTime());
		return peticionMapper.obtenerListaPosibleCrucePet(idpet,idAula,hInicioT,hFinT,dSem);
	}
	public List<Peticion> obtenerListaPosibleCrucePetDir(int idAula,Date hInicio,Date hFin,int dSem){
		System.out.println("QUERRY POSIBLE CRUCE PET DIRECTO");
		System.out.println("AULA : "+idAula+" hInicio "+hInicio+" hFin "+hFin+" dSem "+dSem);
		Time hInicioT=new Time(hInicio.getTime());
		Time hFinT=new Time(hFin.getTime());
		List<Peticion> lpaux=peticionMapper.obtenerListaPosibleCrucePetDir(idAula,hInicioT,hFinT,dSem);
		System.out.println("TAMAÑO DE LA LISTA DE CRUCE DE PETICIONES : "+lpaux.size());
		Iterator<Peticion> iterador=lpaux.iterator();
		while(iterador.hasNext()){
			Peticion p=(Peticion)iterador.next();
			System.out.println(p.getNombreEvento());
		}
		return lpaux;
	}
	public List<Peticion> obtenerListaPosibleCrucePetAprob(int idpet,int idAula,Date hInicio,Date hFin,int dSem){
		System.out.println("QUERRY POSIBLE CRUCE PET APROB");
		Time hInicioT=new Time(hInicio.getTime());
		Time hFinT=new Time(hFin.getTime());
		return peticionMapper.obtenerListaPosibleCrucePetAprob(idpet,idAula,hInicioT,hFinT,dSem);
	}
	public List<RegistroHorario> obtenerCruceHorarios(String periodo,Date hInicio,Date hFin,int diaSem,int idAula){
		System.out.println("QUERRY CRUCE HORARIOS");
		Time hInicioT=new Time(hInicio.getTime());
		Time hFinT=new Time(hFin.getTime());
		return peticionMapper.obtenerCruceHorarios(periodo,hInicioT,hFinT,diaSem,idAula);
	}
	public List<Peticion> obtenerListaPosibleCrucePetAprobDir(int idAula,Date hInicio,Date hFin,int dSem){
		System.out.println("QUERRY CRUCE PET APROB DIR");
		System.out.println("AULA : "+idAula+" hInicio "+hInicio+" hFin "+hFin+" dSem "+dSem);
		Time hInicioT=new Time(hInicio.getTime());
		Time hFinT=new Time(hFin.getTime());
		List<Peticion> lpaux=peticionMapper.obtenerListaPosibleCrucePetAprobDir(idAula,hInicioT,hFinT,dSem);
		System.out.println("TAMAÑO DE LA LISTA DE CRUCE DE PETICIONES APROBADAS: "+lpaux.size());
		Iterator<Peticion> iterador=lpaux.iterator();
		while(iterador.hasNext()){
			Peticion p=(Peticion)iterador.next();
			System.out.println(p.getNombreEvento());
		}
		return lpaux;
	}
	public List<RegistroHorario> obtenerCruceHorariosDir(String periodo,Date hInicio,Date hFin,int diaSem,int idAula){
		System.out.println("QUERRY CRUCE HROARIOS DIR");
		System.out.println("PERIODO : "+periodo+" AULA : "+idAula+" hInicio "+hInicio+" hFin "+hFin+" dSem "+diaSem);
		Time hInicioT=new Time(hInicio.getTime());
		Time hFinT=new Time(hFin.getTime());
		List<RegistroHorario> lpaux=peticionMapper.obtenerCruceHorariosDir(periodo,hInicioT,hFinT,diaSem,idAula);
		System.out.println("TAMAÑO DE LA LISTA DE CRUCE DE HORARIOS CLASE : "+lpaux.size());
		Iterator<RegistroHorario> iterador=lpaux.iterator();
		while(iterador.hasNext()){
			RegistroHorario p=(RegistroHorario)iterador.next();
			System.out.println(p.getCurso());
		}
		return lpaux;
	}
	public List<String> obtenerIdCEUPS(int idP){
		return peticionMapper.obtenerIdCEUPS(idP);
	}
	public List<String> obtenerIdUPG(int idP){
		return peticionMapper.obtenerIdUPG(idP);
	}
	public String obtenerEmailLabo(){
		return peticionMapper.obtenerEmailLabo();
	}
	public String obtenerEmailAula(){
		return peticionMapper.obtenerEmailAula();
	}
	public String obtenerEmailMagna(){
		return peticionMapper.obtenerEmailMagna();
	}
	public String obtenerNombreUsuario(int idPer){
		return peticionMapper.obtenerNombreUsuario(idPer);
	}
}
